package com.zzyl.common.pdf;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * 使用 Apache PDFBox 解析 PDF 文件内容并返回字符串
 */
public class PdfParser {

    /**
     * 从 PDF 文件路径读取内容并返回为字符串
     *
     * @param pdfFilePath PDF 文件路径
     * @return PDF 文本内容
     * @throws IOException 读取或解析失败时抛出
     */
    public static String extractTextFromPdf(String pdfFilePath) throws IOException {
        // 加载 PDF 文档
        try (PDDocument document = PDDocument.load(new File(pdfFilePath))) {
            // 检查文档是否被加密（简单处理：跳过加密文档）
            if (document.isEncrypted()) {
                throw new IOException("PDF is encrypted and cannot be processed.");
            }

            // 创建文本提取器
            PDFTextStripper pdfStripper = new PDFTextStripper();

            // 可选：设置提取页码范围（默认提取全部）
            // pdfStripper.setStartPage(1);
            // pdfStripper.setEndPage(5);

            // 可选：保持原始布局（有时对格式有帮助）
            // pdfStripper.setSortByPosition(true);

            // 提取文本
            return pdfStripper.getText(document);
        }
    }

    public static String extractTextFromPdf(InputStream inputStream) throws IOException {
        try (PDDocument document = PDDocument.load(inputStream)) {
            if (document.isEncrypted()) {
                throw new IOException("PDF is encrypted.");
            }
            PDFTextStripper stripper = new PDFTextStripper();
            return stripper.getText(document);
        }
    }

    // 示例：main 方法测试
    public static void main(String[] args) {
        String filePath = "E:\\139.pdf"; // 替换为你的 PDF 文件路径

        try {
            String content = extractTextFromPdf(filePath);
            System.out.println("=== PDF 内容 ===");
            System.out.println(content);
        } catch (IOException e) {
            System.err.println("解析 PDF 失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}